#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
struct Matrix
{
    ll a[15][15];
    int n,m;
    void init(int x,int y)
    {
        memset(a,0,sizeof(a));
        n=x,m=y;
    }
    const Matrix operator*(const Matrix &A)const
    {
        Matrix ret;
        ret.init(n,A.m);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                for(int k=0;k<A.m;k++)
                    ret.a[i][k]=(a[i][j]*A.a[j][k]+ret.a[i][k])%mod;
        return ret;
    }
};
Matrix mqp(Matrix mat,ll y)
{
    Matrix ret;
    ret.init(mat.n,mat.m);
    for(int i=0;i<mat.n;i++) ret.a[i][i]=1;
    while(y)
    {
        if(y&1) ret=ret*mat;
        mat=mat*mat;
        y>>=1;
    }
    return ret;
}
int lowbit(int x)
{
    return x&(-x);
}
ll n,m,x,y,lb[105],l2[105],p2[105];
string s;
ll ans;
int main()
{
    Matrix mat,f;
    freopen("pearl.in","r",stdin);
    freopen("pearl.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m>>x>>s;
    if(m<=5)
    {
        p2[0]=1;
        for(int i=1;i<=m;i++) p2[i]=p2[i-1]*2%mod;
        for(int i=0;i<m;i++) y|=((s[i]-'0')<<i);
        for(int i=2;i<(1<<m);i++) l2[i]=l2[i/2]+1;
        for(int i=1;i<(1<<m);i++) lb[i]=l2[lowbit(i)];
        lb[0]=m;
        for(int w=0;w<m;w++)
        {
            mat.init(2*m+2,2*m+2);
            for(int i=0;i<=m;i++)
            {
                for(int j=0;j<=m;j++)
                {
                    if(i+j==w) mat.a[i+m+1][j]=mat.a[i][j+m+1]=p2[m-j-1];
                    if(i+j>w)
                    {
                        if(j==m) mat.a[i][j]=mat.a[i+m+1][j+m+1]=1;
                        else mat.a[i][j]=mat.a[i+m+1][j+m+1]=p2[m-j-1];
                    }
                    if(i+j<w) mat.a[i][j]=mat.a[i+m+1][j+m+1]=mat.a[i+m+1][j]=mat.a[i][j+m+1]=p2[m-j-2];
                }
            }
            /*cout<<"?\n";
            for(int i=0;i<2*m+2;i++)
            {
                for(int j=0;j<2*m+2;j++)
                {
                    cout<<mat.a[i][j]<<' ';
                }
                cout<<'\n';
            }*/
            f.init(1,2*m+2);
            f.a[0][lb[y]]=1;
            f=f*mqp(mat,n-x);
            for(int i=0;i<2*m+2;i++)
            {
                if(i!=lb[y]+m+1 && i>=m+1)
                {
                    f.a[0][lb[y]+m+1]=(f.a[0][lb[y]+m+1]+f.a[0][i])%mod;
                    f.a[0][i]=0;
                }
                if(i!=lb[y] && i<m+1)
                {
                    f.a[0][lb[y]]=(f.a[0][lb[y]]+f.a[0][i])%mod;
                    f.a[0][i]=0;
                }
            }
            //for(int i=0;i<2*m+2;i++) cout<<f.a[0][i]<<' ';
            //cout<<'\n';
            f=f*mqp(mat,x-1);
            for(int i=m+1;i<2*m+2;i++) ans=(ans+f.a[0][i]*p2[w])%mod;
        }
    }
    cout<<ans<<'\n';
    return 0;
}
